#ifndef QDOCK_H
#define QDOCK_H
#include <QWidget>
#include <QObject>
#include <QLabel>
#include "QtGui/qstyleoption.h"

#include <unordered_map>
#include <unordered_set>
#include "window.h"
#include <QPoint>
#include <QRect>
#include <QSplitter>
#include <QMultiMap>

//#include "dockwidget.h"

class UDockWidgetPreviewer;
class QLayoutManager;
class QBaseDock;
class UDockWidget;
class QIndicator;
class QLeftIndicator;
class QRightIndicator;
class QTopIndicator;
class QBottomIndicator;
class QTabbedIndicator;
class DockManager;
class QPolicyManager;
class IndividualIndicators;

class QPreviewWidget : public QWidget {
    Q_OBJECT
public:
    QPreviewWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);

signals:
    void keyPress(QKeyEvent *event);

protected:
    void keyPressEvent(QKeyEvent *);

};

class QDockItem : public QWidget{
    Q_OBJECT
protected:
    QDockItem(QWidget *parent=0, Qt::WindowFlags flags=0):QWidget(parent, flags){}

Q_SIGNALS:
    void mouseDown(QDockItem* dw, QMouseEvent* event);
    void mouseMove(QDockItem* dw, QMouseEvent* event);
    void mouseUp(QDockItem* dw, QMouseEvent* event);
    void keyPress(QDockItem* dw, QKeyEvent* event);
public:
    QDockItem* parentDockItem();
};

enum DockOption {
    NoDock = 0,
    Left = 1,
    Right = 2,
    Horizontal = Left | Right,
    Top = 4,
    Bottom = 8,
    Vertical = Top | Bottom,
    Tabbed = 16,
    CROSS = Horizontal | Vertical,
    After = Tabbed << 1
};


#endif
